L1-022 奇偶分家

题目 L1-022 奇偶分家

image-7e5fbe73

思路分析

1、奇偶性判定

我们判断一个数是奇数还是偶数,往往是通过取模 %来判断的,如下:

#include <stdio.h>
int main() {
    if(5 % 2 == 1) {
        printf("5是奇数\n");
    }
    if(6 % 2 == 0) {
        printf("6是偶数\n");
    }
    return 0;
}

然而,我们也可以这么写:

#include <stdio.h>
int main() {
    if(5 & 1) {
        printf("5是奇数\n");
    }
    if( (6 & 1) ==0 ) {
        printf("6是偶数\n");
    }
    return 0;
}

这是利用了奇数和偶数分别的二进制数的特性,如下表所示:

2-Learning/02-算法/05-天梯赛/L1/assets/image-2c0792ab

所以,我们对任何一个数,通过将它和 0b1 进行位与,结果为零,则必然这个数的二进制末尾位为0,根据以上表就能得出它是偶数了;否则,就是奇数。

代码实现

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'

int main()

{

	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

	int n;cin>>n;

	int cntj=0,cnto=0;

	while(n--){

		int tmp;cin>>tmp;

		if(tmp&1)	cntj++;

		else cnto++;

	}

	cout<<cntj<<" "<<cnto;

	return 0;

}

同类题型

视频讲解


⬅️ L1-021 重要的话说三遍 🏠 00-天梯赛 ➡️ L1-023 输出GPLT